home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1995 January / macformat-020.iso / Shareware City / Applications / Alpha.5.96 folder / Tcl / UserCode / states.tcl < prev    next >
Encoding:
Text File  |  1994-08-15  |  1.8 KB  |  93 lines  |  [TEXT/ALFA]

  1. # Pete,
  2. # The enclosed TCL procs implement the capability to save and restore the
  3. # current window/file list.  I'm sure it needs some beefing up in the area of
  4. # error recovery, but it's worked well for me so far.
  5. # Regards,
  6. # David
  7. # david.rogers@aldus.com
  8. # davidr@halcyon.com
  9.  
  10.  
  11. if {![string length [info commands fileMenuProc42]]} {
  12.     rename fileMenuProc fileMenuProc42
  13. }
  14.  
  15. proc fileMenuProc {menu item} {
  16.     if {$item == "quit"} {
  17.         saveState
  18.     }
  19.     fileMenuProc42 $menu $item
  20. }
  21.  
  22. proc restoreNamedState {} {
  23.     global HOME
  24.     global fname
  25.     if {!file exists "$HOME:States"} {
  26.         message "No saved states!"
  27.         return
  28.     }
  29.     set fname [listpick -p "Choose the state to restore:" [glob -t TEXT "$HOME:States:*"]]
  30.     uplevel #0 {
  31.         source $fname
  32.     }
  33.     restoreStateList
  34. }
  35.  
  36.  
  37. proc restoreState {} {
  38.     global HOME
  39.     global fname
  40.     set fname "$HOME:States:State.tcl"
  41.     uplevel #0 {
  42.         if {[catch {source $fname}]} {
  43.             alertnote "Error restoring state!"
  44.             return
  45.         }
  46.     }
  47.     restoreStateList
  48. }
  49.  
  50.  
  51. proc saveNamedState {} {
  52.     global HOME
  53.     set fname [getline "Save state in file:" "NewState.tcl"]
  54.     if {[string length $fname] > 27 } {
  55.         alertnote "$fname is not a valid file name - too long."
  56.         return
  57.     }
  58.     if {[string first ":" $fname] != -1} {
  59.         alertnote "$fname is not a valid file name - contains a ':'."
  60.         return
  61.     }
  62.     saveStateByName $fname
  63. }
  64.  
  65. proc saveState {} {
  66.     saveStateByName "State.tcl"
  67. }
  68.  
  69. proc saveStateByName stateFileName {
  70.     global HOME
  71.  
  72.     if {![file exists "$HOME:States"]} {
  73.         mkdir "$HOME:States"
  74.     }
  75.     set fname "$HOME:States:$stateFileName"
  76.     set fileid [open $fname "w+"]
  77.     puts $fileid "proc restoreStateList {} {"
  78.     set winList [winNames -f]
  79.     set lastWindow [expr [llength $winList] - 1]
  80.     for {set Index $lastWindow} {$Index >= 0} {incr Index -1} {
  81.         set f [lindex $winList $Index]
  82.         puts $fileid "    catch \{edit \"$f\"\}"
  83.     }    
  84.     puts $fileid "}"
  85.     close $fileid
  86.  
  87. }
  88.  
  89.  
  90.  
  91.